#define _CRT_SECURE_NO_WARNINGS 1

#include"vector.h"

//class Solution {
//public:
//    vector<int> singleNumber(vector<int>& nums)
//    {
//        vector<int> retv(2, 0);
//
//        int x = 0;
//        for (auto e : nums)
//            x ^= e;
//
//        long long count = 1;
//        while (true)
//        {
//            // 0110 & 1 = 0110
//            // 0110 & 10 = 0100
//            // 0110 1010 1000 0101 0101 1001 0011 1000
//            // 0000 0000 0000 0000 0000 0000 0000 0001
//            if ((x | count) == x)
//            {
//                cout << count << endl;
//                break;
//            }
//            count *= 2;
//        }
//
//        for (auto e : nums)
//        {
//            if ((e & count) == count)
//                retv[0] ^= e;
//            else
//                retv[1] ^= e;
//        }
//
//        return retv;
//    }
//};
//
//void test1()
//{
//    vector<int> v1(10, 5);
//    Print(v1);
//    vector<int> v2(v1.begin(), v1.begin() + 3);
//    Print(v2);
//    vector<int> v3(v2);
//    Print(v2);
//    v3 = v1;
//    Print(v3);
//}
//
//void test2()
//{
//    vector<int> v1;
//    cout << v1.size() << endl;
//    cout << v1.capacity() << endl;
//
//    v1.resize(20);
//    cout << v1.size() << endl;
//    cout << v1.capacity() << endl;
//
//    v1.resize(10, 1);
//    cout << v1.size() << endl;
//    cout << v1.capacity() << endl;
//}
//void test3()
//{
//    vector<int> v1;
//    vector<int> v2(10, 3);
//    vector<int> v3 = v2;
//    Print(v2);
//    Print(v3);
//}
//int main()
//{
//    test3();
//	return 0;
//}
//namespace ZMH
//{
//	template<class T>
//	class vector
//	{
//	public:
//		typedef T* iterator;
//		typedef const T* const_iterator;
//
//		vector() = default;
//		vector(size_t n, const T& val = T())
//		{
//			reserve(n);
//			while (n--)
//				push_back(val);
//		}
//		vector(const vector<T>& v)
//		{
//			//int size = v.size()
//				//reserve(size);
//
//			for (int i = 0; i < _end - _start; i++)
//				_start[i] = v._start[i];
//		}
//
//		iterator begin()
//		{
//			return _start;
//		}
//		const_iterator begin() const
//		{
//			return _start;
//		}
//		iterator end()
//		{
//			return _end;
//		}
//		const_iterator end() const
//		{
//			return _end;
//		}
//
//		int size()
//		{
//			return _end - _start;
//		}
//		int capacity()
//		{
//			return _end_of_storage - _start;
//		}
//		void reserve(size_t n)
//		{
//			if (n <= _end_of_storage - _start)
//				return;
//
//			int size = _end - _start;
//			iterator _new_start = new T[n];
//			for (int i = 0; i < size; i++)
//			{
//				_new_start[i] = _start[i];
//			}
//
//			delete[] _start;
//			_start = _new_start;
//			_end = _start + size;
//			_end_of_storage = _start + n;
//		}
//

//
//	private:
//		iterator _start = nullptr;
//		iterator _end = nullptr;
//		iterator _end_of_storage = nullptr;
//	};
//}
//
//#include<vector>
//void test3()
//{
//	vector<int> v1(10);
//	for (int i = 0; i < v1.size(); i++)
//		v1[i] = i + 1;
//
//	vector<int>::iterator it = v1.begin();
//	while (it != v1.end())
//		cout << *it++ << " ";
//	cout << endl;
//
//	it = v1.begin();
//	while (it != v1.end())
//	{
//		it = v1.erase(it);
//		cout << *it++ << " ";
//	}
//	cout << endl;
//}

int main()
{
	ZMH::test8();
	return 0;
}